$(function(){
	$('#main').bind('contextmenu',function(e){
            return false;
        });
	setLevel(1);run();
	changeLevel($('#simple'),1);
	changeLevel($('#general'),2);
	changeLevel($('#hard'),3);
	custom();
})

var m=9,n=9,mines=10;
var a=new Array();
var flag="标";
var lei="雷";
var time;
var click=0;

function changeLevel(element,level){
	element.click(function(){
		$('.level span').attr('class','');
		$(this).attr('class','active');
		$('.custom').hide(1000);
		setLevel(level);
		run();
	});
}

function custom(){
	$('#custom').click(function(){
		$('.level span').attr('class','');
		$(this).attr('class','active');
		$('.custom').show(1000);
	});
	$('.start').click(function(){
		m=$("#m").val();
		n=$('#n').val();
		mines=$('#mines').val();
		console.log(m+n+mines);
		showGame();
		run();
	});
}

function setLevel(level){
	switch(level){
		case 1:
			m=9;n=9;mines=10;
			break;
		case 2:
			m=16;n=16;mines=40
			break;
		case 3:
			m=16;n=30;mines=99;
			break;
	}
	showGame();
}

function showGame(){
	$('#main').children().remove();
	$(".box").css('height',(m*31+1)+'px');
	$(".box").css('width',(n*31+1)+'px');
	$("#message").css('line-height',(m*31+1)+'px');
	for (var i = 1; i <= m; i++) {
		$('#main').append('<div class="x" id="'+i+'"></div>');
		for (var j = 1; j <= n;j++) {
			$('.x[id='+i+']').append('<div class="y '+j+'"><span></div>');
		};
	};
	
}

function run(){
	for (var i = 0; i < m+2; i++){
		a[i]=new Array();
		for(var j=0; j < n+2; j++)
			a[i][j]=0;
	}
	Init();
	for (var i = 1; i <= m; i++)
		for(var j=1; j <= n; j++)
			show('#'+i+' .'+j,i,j);
}

function Init(){
	var i=0;
	stop();
	$('#message').html("");
	$('#message').hide();
	$('#main span').hide();
	$('.time').html('00:00');
	$('.y').css('background','#7DF3FF');
	while(i<mines){
		x=parseInt(m*Math.random()+1);
		y=parseInt(n*Math.random()+1);
		if(a[x][y]==0){
			a[x][y]=lei;
			i++;
		}
	}
	for (var i = 1; i <= m; i++)
		for(var j=1; j <= n; j++){
			if(a[i][j]==0){
				var count=0;
				for(var k=i-1; k<i+2; k++)
					for(var l=j-1; l<j+2; l++)
						if(a[k][l]==lei)count++;
				a[i][j]=count;
			}
		}
	for (var i = 1; i <= m; i++)
		for(var j=1; j <= n; j++){
			var span=$('#'+i+' .'+j+' span');
			if(a[i][j]==0){
				span.html("0");
				span.css('color','#fff');
			} 
			else span.html(a[i][j]);
		}
}

function show(element,x,y){
	$(element).mousedown(function(e){
		if(click==0){
			start();
			click++;
		}
		if(e.which==1&&$(element+' span:last').attr('class')!='flag'){
			span=$(element+' span');
			span.show();
			span.parent().css('background','#fff');
			if(a[x][y]==0)
				space(x,y);
			if(span.html()==lei){
				$('.y').css('background','#fff');
				$('span').show();
				$('.flag').remove();
				span.html('爆');
				$('#message').html('GAME OVER!');
				$('#message').css('background','rgba(224, 22, 22, 0.62)')
				$('#message').show();
				stop();
			}else{	
				var nums=0;
				for (var i = 1; i < m+1; i++)
					for(var j = 1;j < n+1; j++)
						if($('#'+i+' .'+j+' span:first').is(":hidden"))nums++;
				if(nums==mines){
					$('#message').css('background','rgba(42, 182, 214, 0.62)');
					$('#message').html('YOU WIN!');
					$('#message').show();
					stop();
				}
			}
		}else if(e.which==3&&$('#'+x+' .'+y+' span:first').is(":hidden")){
			if($(element+' span:last').attr('class')=='flag'){
				$(element+' span:last').remove();
			}else
			$(element+' span').after('<span class="flag" style="display:inline">'+flag+'</span>');
		}
	});
}

function space(x,y){
	for (var i = x-1; i < x+2; i++) {
		for(var j=y-1;j < y+2; j++){
			if($('#'+i+' .'+j+' span').is(":hidden")&&$('#'+i+' .'+j+' span:last').attr('class')!='flag'){
				$('#'+i+' .'+j+' span').parent().css('background','#fff');
				$('#'+i+' .'+j+' span').show();
				if(a[i][j]==0)space(i,j)
			}
		}
	}
}

function start(){
	var t=0;
	time=setInterval(function(){
		t++;
		$(".time").html(showTime(t));
	},1000)
}
function stop(){
	click=0;
	clearInterval(time);
}

function showTime(t){
	var str;
	s=t%60>=10?t%60:"0"+t%60;
	min=parseInt(t/60);
	min=min>=10?min:"0"+min;
	str=min+":"+s;
	return str;
}